Add an option to make bucket notifications synchronous (#17406)

With the current asynchronous behaviour in sending notification events
to the targets, we can't provide guaranteed delivery as the systems
might go for restarts.

For such event-driven use-cases, we can provide an option to enable
synchronous events where the APIs wait until the event is successfully
sent or persisted.

This commit adds 'MINIO_API_SYNC_EVENTS' env which when set to 'on'
will enable sending/persisting events to targets synchronously.
This commit is contained in:
Praveen raj Mani
2023-06-21 06:08:59 +05:30
committed by GitHub
parent 02c2ec3027
commit 7c72b25ef0
8 changed files with 74 additions and 60 deletions

View File

@@ -45,6 +45,7 @@ const (
apiDisableODirect = "disable_odirect"
apiGzipObjects = "gzip_objects"
apiRootAccess = "root_access"
apiSyncEvents = "sync_events"
EnvAPIRequestsMax = "MINIO_API_REQUESTS_MAX"
EnvAPIRequestsDeadline = "MINIO_API_REQUESTS_DEADLINE"
@@ -62,6 +63,7 @@ const (
EnvAPIDisableODirect = "MINIO_API_DISABLE_ODIRECT"
EnvAPIGzipObjects = "MINIO_API_GZIP_OBJECTS"
EnvAPIRootAccess = "MINIO_API_ROOT_ACCESS" // default "on"
EnvAPISyncEvents = "MINIO_API_SYNC_EVENTS" // default "off"
)
// Deprecated key and ENVs
@@ -135,6 +137,10 @@ var (
Key: apiRootAccess,
Value: "on",
},
config.KV{
Key: apiSyncEvents,
Value: "off",
},
}
)
@@ -154,6 +160,7 @@ type Config struct {
DisableODirect bool `json:"disable_odirect"`
GzipObjects bool `json:"gzip_objects"`
RootAccess bool `json:"root_access"`
SyncEvents bool `json:"sync_events"`
}
// UnmarshalJSON - Validate SS and RRS parity when unmarshalling JSON.
@@ -269,5 +276,7 @@ func LookupConfig(kvs config.KVS) (cfg Config, err error) {
}
cfg.StaleUploadsExpiry = staleUploadsExpiry
cfg.SyncEvents = env.Get(EnvAPISyncEvents, kvs.Get(apiSyncEvents)) == config.EnableOn
return cfg, nil
}

View File

@@ -104,5 +104,11 @@ var (
Optional: true,
Type: "boolean",
},
config.HelpKV{
Key: apiSyncEvents,
Description: "set to enable synchronous bucket notifications" + defaultHelpPostfix(apiSyncEvents),
Optional: true,
Type: "boolean",
},
}
)