internal async ValueTask <bool> CreateStreamAsync <T>(DataPath dataPath, Metadata metadata, DataStreamCreateFlags flags) { var slf = (StreamLogFlags)flags; short fixedSize = 0; if (slf.IsBinary() && TypeEnumHelper <T> .FixedSize > 0) { if (slf.NoTimestamp()) { fixedSize = TypeEnumHelper <T> .FixedSize; } else { fixedSize = checked ((short)(Timestamp.Size + TypeEnumHelper <T> .FixedSize)); } } // TODO this is only first take to move further and start writing stuff, // needs review and proper ContainerSchema generation from types T. // Also there are so many different flags that they need review. var schema = new ContainerSchema() { ContainerType = (byte)ContainerLayout.None, ContainerFlags = (byte)slf, ValuesSchema = new TypeSchema() { DataTypeHeader = TypeEnumHelper <T> .DataTypeHeader, TypeName = typeof(T).Name, TypeFullName = typeof(T).FullName, FixedSize = fixedSize, } }; var mdr = await MetadataManager.CreateStreamAsync(dataPath, metadata, schema).ConfigureAwait(false); if (mdr.PK != null) { var containerId = mdr.ContainerId; var streamId = StreamLogId.ContainerIdToStreamId(containerId); var slid = new StreamLogId(mdr.RepoId, streamId); var state = StreamLogManager.StateStorage.GetState(slid); var lockHolder = state.LockHolder; state.CheckInit(slid, fixedSize, slf); return(true); } mdr = await MetadataManager.GetMetadataRecordByPathAsync(dataPath).ConfigureAwait(false); if (mdr.PK != null) { return(false); } throw new ArgumentException($"Cannot create a new data stream {dataPath}."); }
public ValueTask <bool> CreateStreamAsync <T>( string newStreamName, Metadata metadata, DataStreamCreateFlags flags = DataStreamCreateFlags.None) { var dp = _dataPathPrefix.Combine(newStreamName, false); return(_dataStore.CreateStreamAsync <T>(dp, metadata, flags)); }