Beispiel #1
0
        public void ScavengeStarted()
        {
            var metadataEventId = Guid.NewGuid();
            var metaStreamId    = SystemStreams.MetastreamOf(_streamName);
            var acl             = new StreamAcl(
                new string[] { "$ops" },
                new string[] {},
                new string[] {},
                new string[] {},
                new string[] {}
                );
            var metadata        = new StreamMetadata(maxAge: _scavengeHistoryMaxAge, acl: acl);
            var metaStreamEvent = new Event(metadataEventId, SystemEventTypes.StreamMetadata, isJson: true,
                                            data: metadata.ToJsonBytes(), metadata: null);

            _ioDispatcher.WriteEvent(metaStreamId, ExpectedVersion.Any, metaStreamEvent, SystemAccounts.System, m => {
                if (m.Result != OperationResult.Success)
                {
                    Log.Error(
                        "Failed to write the $maxAge of {days} days metadata for the {stream} stream. Reason: {reason}",
                        _scavengeHistoryMaxAge.TotalDays, _streamName, m.Result);
                }
            });

            var scavengeStartedEvent = new Event(Guid.NewGuid(), SystemEventTypes.ScavengeStarted, true,
                                                 new Dictionary <string, object> {
                { "scavengeId", _scavengeId },
                { "nodeEndpoint", _nodeId },
            }.ToJsonBytes(), null);

            WriteScavengeDetailEvent(_streamName, scavengeStartedEvent, _retryAttempts);
        }
        private Event CreateStreamMetadataEvent()
        {
            var eventId = Guid.NewGuid();
            var acl     = new StreamAcl(
                readRole: SystemRoles.Admins, writeRole: SystemRoles.Admins,
                deleteRole: SystemRoles.Admins, metaReadRole: SystemRoles.All,
                metaWriteRole: SystemRoles.Admins);
            var metadata  = new StreamMetadata(maxCount: 2, maxAge: null, cacheControl: null, acl: acl);
            var dataBytes = metadata.ToJsonBytes();

            return(new Event(eventId, SystemEventTypes.StreamMetadata, isJson: true, data: dataBytes, metadata: null));
        }
        private Event CreateStreamMetadataEvent(long?tb)
        {
            var eventId = Guid.NewGuid();
            var acl     = new StreamAcl(
                readRole: SystemRoles.Admins, writeRole: SystemRoles.Admins,
                deleteRole: SystemRoles.Admins, metaReadRole: SystemRoles.Admins,
                metaWriteRole: SystemRoles.Admins);
            var metadata = new StreamMetadata(cacheControl: null,
                                              truncateBefore: tb,
                                              acl: acl);
            var dataBytes = metadata.ToJsonBytes();

            return(new Event(eventId, SystemEventTypes.StreamMetadata, isJson: true, data: dataBytes, metadata: null));
        }
Beispiel #4
0
        private void SetScavengeStreamMetadata()
        {
            var metaStreamId = SystemStreams.MetastreamOf(SystemStreams.ScavengesStream);

            _ioDispatcher.ReadBackward(metaStreamId, -1, 1, false, SystemAccount.Principal, readResult => {
                if (readResult.Result == ReadStreamResult.Success || readResult.Result == ReadStreamResult.NoStream)
                {
                    if (readResult.Events.Length == 1)
                    {
                        var currentMetadata = StreamMetadata.FromJsonBytes(readResult.Events[0].Event.Data);
                        var hasProperACL    = currentMetadata.Acl != null &&
                                              currentMetadata.Acl.ReadRoles != null &&
                                              currentMetadata.Acl.ReadRoles.Contains(x => x.Equals("$ops"));

                        if (currentMetadata.MaxAge == _scavengeHistoryMaxAge && hasProperACL)
                        {
                            Log.Debug("Max age and $ops read permission already set for the {stream} stream.", SystemStreams.ScavengesStream);
                            return;
                        }
                    }

                    Log.Debug("Setting max age for the {stream} stream to {maxAge}.", SystemStreams.ScavengesStream,
                              _scavengeHistoryMaxAge);

                    Log.Debug("Setting $ops read permission for the {stream} stream", SystemStreams.ScavengesStream);

                    var acl = new StreamAcl(
                        new string[] { "$ops" },
                        new string[] {},
                        new string[] {},
                        new string[] {},
                        new string[] {}
                        );

                    var metadata        = new StreamMetadata(maxAge: _scavengeHistoryMaxAge, acl: acl);
                    var metaStreamEvent = new Event(Guid.NewGuid(), SystemEventTypes.StreamMetadata, isJson: true,
                                                    data: metadata.ToJsonBytes(), metadata: null);
                    _ioDispatcher.WriteEvent(metaStreamId, ExpectedVersion.Any, metaStreamEvent,
                                             SystemAccount.Principal, m => {
                        if (m.Result != OperationResult.Success)
                        {
                            Log.Error(
                                "Failed to write the $maxAge of {days} days and set $ops permission for the {stream} stream. Reason: {reason}",
                                _scavengeHistoryMaxAge.TotalDays, SystemStreams.ScavengesStream, m.Result);
                        }
                    });
                }
            });
        }
        public static async Task SetDefaultStreamMetaData(this IEventStoreConnection conn, string stream)
        {
            try
            {
                var acl      = new StreamAcl("$admins", "$admins", "$admins", "$admins", "$admins");
                var metaData = StreamMetadata.Create(acl: acl);
                var result   = await conn.SetStreamMetadataAsync(stream, ExpectedVersion.Any, metaData);

                return;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                throw;
            }
        }
Beispiel #6
0
        private void SetOpsPermissions(IList <string> recentScavengeIds)
        {
            //sets $ops permissions on last 30 $scavenges-<scavenge id> stream
            //added for backward compatibility to make UI scavenge history work properly with $ops users

            var last30ScavengeIds = new HashSet <string>();

            foreach (var scavengeId in recentScavengeIds)
            {
                if (last30ScavengeIds.Count >= 30)
                {
                    break;
                }
                last30ScavengeIds.Add(scavengeId);
            }

            if (last30ScavengeIds.Count > 0)
            {
                Log.Debug("Setting $ops read permission on last {count} $scavenges-<scavenge id> streams.", last30ScavengeIds.Count);
            }

            foreach (var scavengeId in last30ScavengeIds)
            {
                var acl = new StreamAcl(
                    new string[] { "$ops" },
                    new string[] {},
                    new string[] {},
                    new string[] {},
                    new string[] {}
                    );

                var scavengeIdStream = SystemStreams.ScavengesStream + "-" + scavengeId;
                var metaStreamId     = SystemStreams.MetastreamOf(scavengeIdStream);
                var metadata         = new StreamMetadata(maxAge: _scavengeHistoryMaxAge, acl: acl);
                var metaStreamEvent  = new Event(Guid.NewGuid(), SystemEventTypes.StreamMetadata, isJson: true,
                                                 data: metadata.ToJsonBytes(), metadata: null);
                _ioDispatcher.WriteEvent(metaStreamId, ExpectedVersion.Any, metaStreamEvent,
                                         SystemAccount.Principal, m => {
                    if (m.Result != OperationResult.Success)
                    {
                        Log.Error(
                            "Failed to set $ops read permission for the {stream} stream. Reason: {reason}",
                            _scavengeHistoryMaxAge.TotalDays, scavengeIdStream, m.Result);
                    }
                });
            }
        }
Beispiel #7
0
 /// <summary>
 /// Constructs a new <see cref="SystemSettings"/>.
 /// </summary>
 /// <param name="userStreamAcl"></param>
 /// <param name="systemStreamAcl"></param>
 public SystemSettings(StreamAcl userStreamAcl = default, StreamAcl systemStreamAcl = default)
 {
     UserStreamAcl   = userStreamAcl;
     SystemStreamAcl = systemStreamAcl;
 }
Beispiel #8
0
 public EffectiveAcl(StreamAcl stream, StreamAcl system, StreamAcl @default)
 {
     Stream  = stream;
     System  = system;
     Default = @default;
 }