本文整理汇总了C#中IFdbTransaction.Set方法的典型用法代码示例。如果您正苦于以下问题:C# IFdbTransaction.Set方法的具体用法?C# IFdbTransaction.Set怎么用?C# IFdbTransaction.Set使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IFdbTransaction
的用法示例。
在下文中一共展示了IFdbTransaction.Set方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Scenario3
private Task Scenario3(IFdbTransaction tr)
{
var location = FdbSubspace.Create(Slice.FromAscii("TEST"));
tr.Set(location.Key + (byte)'a', Slice.FromAscii("A"));
tr.AtomicAdd(location.Key + (byte)'k', Slice.FromFixed32(1));
tr.Set(location.Key + (byte)'z', Slice.FromAscii("C"));
tr.ClearRange(location.Key + (byte)'a', location.Key + (byte)'k');
tr.ClearRange(location.Key + (byte)'k', location.Key + (byte)'z');
return Task.FromResult<object>(null);
}
示例2: Scenario2
private Task Scenario2(IFdbTransaction tr)
{
var location = FdbSubspace.Create(Slice.FromAscii("TEST"));
tr.ClearRange(FdbKeyRange.StartsWith(location.Key));
for (int i = 0; i < 10; i++)
{
tr.Set(location.Pack(i), Slice.FromString("value of " + i));
}
return Task.FromResult<object>(null);
}
示例3: Scenario5
private async Task Scenario5(IFdbTransaction tr)
{
var location = FdbSubspace.Create(Slice.FromAscii("TEST"));
//tr.Set(location.Pack(42), Slice.FromString("42"));
//tr.Set(location.Pack(50), Slice.FromString("50"));
//tr.Set(location.Pack(60), Slice.FromString("60"));
var x = await tr.GetKeyAsync(FdbKeySelector.LastLessThan(location.Pack(49)));
Console.WriteLine(x);
tr.Set(location.Pack("FOO"), Slice.FromString("BAR"));
}
示例4: CreateOrOpenInternalAsync
//.........这里部分代码省略.........
if (path.Count == 0)
{ // Root directory contains node metadata and so may not be opened.
throw new InvalidOperationException("The root directory may not be opened.");
}
// to open an existing directory, we only need the read transaction
// if none was specified, we can use the writeable transaction
if (readTrans == null) readTrans = trans;
await CheckReadVersionAsync(readTrans).ConfigureAwait(false);
if (prefix.HasValue && this.Path.Count > 0)
throw new InvalidOperationException("Cannot specify a prefix in a partition.");
var existingNode = await FindAsync(readTrans, path).ConfigureAwait(false);
if (existingNode.Exists)
{
if (existingNode.IsInPartition(false))
{
var subpath = existingNode.PartitionSubPath;
var dl = GetPartitionForNode(existingNode).DirectoryLayer;
return await dl.CreateOrOpenInternalAsync(readTrans, trans, subpath, layer, prefix, allowCreate, allowOpen, throwOnError).ConfigureAwait(false);
}
if (!allowOpen)
{
if (throwOnError) throw new InvalidOperationException(string.Format("The directory {0} already exists.", path));
return null;
}
if (layer.IsPresent && layer != existingNode.Layer)
{
throw new InvalidOperationException(String.Format("The directory {0} was created with incompatible layer {1} instead of expected {2}.", path, layer.ToAsciiOrHexaString(), existingNode.Layer.ToAsciiOrHexaString()));
}
return ContentsOfNode(existingNode.Subspace, path, existingNode.Layer);
}
if (!allowCreate)
{
if (throwOnError) throw new InvalidOperationException(string.Format("The directory {0} does not exist.", path));
return null;
}
// from there, we actually do need a wrtieable transaction
if (trans == null) throw new InvalidOperationException("A writeable transaction is needed to create a new directory");
await CheckWriteVersionAsync(trans).ConfigureAwait(false);
if (prefix == null)
{ // automatically allocate a new prefix inside the ContentSubspace
long id = await this.Allocator.AllocateAsync(trans).ConfigureAwait(false);
prefix = this.ContentSubspace.Pack(id);
// ensure that there is no data already present under this prefix
if (FdbDirectoryLayer.AnnotateTransactions) trans.Annotate("Ensure that there is no data already present under prefix {0}", prefix);
if (await trans.GetRange(FdbKeyRange.StartsWith(prefix)).AnyAsync().ConfigureAwait(false))
{
throw new InvalidOperationException(String.Format("The database has keys stored at the prefix chosen by the automatic prefix allocator: {0}", prefix.ToAsciiOrHexaString()));
}
// ensure that the prefix has not already been allocated
if (FdbDirectoryLayer.AnnotateTransactions) trans.Annotate("Ensure that the prefix {0} has not already been allocated", prefix);
if (!(await IsPrefixFree(trans.Snapshot, prefix).ConfigureAwait(false)))
{
throw new InvalidOperationException("The directory layer has manually allocated prefixes that conflict with the automatic prefix allocator.");
}
}
else
{
if (FdbDirectoryLayer.AnnotateTransactions) trans.Annotate("Ensure that the prefix {0} hasn't already been allocated", prefix);
// ensure that the prefix has not already been allocated
if (!(await IsPrefixFree(trans, prefix).ConfigureAwait(false)))
{
throw new InvalidOperationException("The given prefix is already in use.");
}
}
// we need to recursively create any missing parents
FdbSubspace parentNode;
if (path.Count > 1)
{
var parentSubspace = await CreateOrOpenInternalAsync(readTrans, trans, path.Substring(0, path.Count - 1), Slice.Nil, Slice.Nil, true, true, true).ConfigureAwait(false);
parentNode = NodeWithPrefix(parentSubspace.Key);
}
else
{
parentNode = this.RootNode;
}
if (parentNode == null) throw new InvalidOperationException(string.Format("The parent directory of {0} doesn't exist.", path));
// initialize the metadata for this new directory
var node = NodeWithPrefix(prefix);
if (FdbDirectoryLayer.AnnotateTransactions) trans.Annotate("Registering the new prefix {0} into the folder sub-tree", prefix);
trans.Set(GetSubDirKey(parentNode, path.Get<string>(-1)), prefix);
SetLayer(trans, node, layer);
return ContentsOfNode(node, path, layer);
}
示例5: SetSize
private void SetSize(IFdbTransaction trans, long size)
{
Contract.Requires(trans != null && size >= 0);
//note: python code converts the size into a string
trans.Set(SizeKey(), Slice.FromString(size.ToString()));
}
示例6: WriteToSparse
private void WriteToSparse(IFdbTransaction trans, long offset, Slice data)
{
Contract.Requires(trans != null && offset >= 0);
if (data.IsNullOrEmpty) return;
int chunks = (int)((data.Count + CHUNK_LARGE - 1) / CHUNK_LARGE);
int chunkSize = (data.Count + chunks) / chunks;
for (int n = 0; n < data.Count; n += chunkSize)
{
trans.Set(DataKey(offset + n), data[n, n + chunkSize]);
}
}
示例7: TryRemoteSplitPointAsync
private async Task<bool> TryRemoteSplitPointAsync(IFdbTransaction trans, long offset)
{
Contract.Requires(trans != null && offset >= 0);
var b = await GetChunkAtAsync(trans, offset).ConfigureAwait(false);
if (b.Offset == 0 || b.Key == Slice.Nil) return false; // in sparse region, or at beginning
var a = await GetChunkAtAsync(trans, b.Offset - 1).ConfigureAwait(false);
if (a.Key == Slice.Nil) return false; // no previous chunk
if (a.Offset + a.Data.Count != b.Offset) return false; // chunks can't be joined
if (a.Data.Count + b.Data.Count > CHUNK_SMALL) return false; // chunks shouldn't be joined
// yay--merge chunks
trans.Clear(b.Key);
trans.Set(a.Key, a.Data + b.Data);
return true;
}
示例8: SetLayer
private static void SetLayer(IFdbTransaction trans, FdbSubspace subspace, Slice layer)
{
if (layer.IsNull) layer = Slice.Empty;
trans.Set(subspace.Pack(LayerSuffix), layer);
}
示例9: SetValue
public void SetValue(IFdbTransaction trans, IFdbTuple id, string field, Slice value)
{
if (trans == null) throw new ArgumentNullException("trans");
if (id == null) throw new ArgumentNullException("id");
if (string.IsNullOrEmpty(field)) throw new ArgumentNullException("field");
trans.Set(GetFieldKey(id, field), value);
}
示例10: StoreTask
private void StoreTask(IFdbTransaction tr, Slice taskId, DateTime scheduledUtc, Slice taskBody)
{
tr.Annotate("Writing task {0}", taskId.ToAsciiOrHexaString());
var prefix = this.TaskStore.Partition(taskId);
// store task body and timestamp
tr.Set(prefix.Key, taskBody);
tr.Set(prefix.Pack(TASK_META_SCHEDULED), Slice.FromInt64(scheduledUtc.Ticks));
// increment total and pending number of tasks
this.Counters.Increment(tr, COUNTER_TOTAL_TASKS);
this.Counters.Increment(tr, COUNTER_PENDING_TASKS);
}
示例11: Scenario1
// Compare the behavior of the MemoryDB against a FoundationDB database
private async Task Scenario1(IFdbTransaction tr)
{
tr.Set(Slice.FromAscii("hello"), Slice.FromAscii("world!"));
tr.Clear(Slice.FromAscii("removed"));
var result = await tr.GetAsync(Slice.FromAscii("narf"));
}
示例12: MoveInternalAsync
internal async Task<FdbDirectorySubspace> MoveInternalAsync(IFdbTransaction trans, IFdbTuple oldPath, IFdbTuple newPath, bool throwOnError)
{
Contract.Requires(trans != null && oldPath != null && newPath != null);
if (oldPath.Count == 0)
{
throw new InvalidOperationException("The root directory may not be moved.");
}
if (newPath.Count == 0)
{
throw new InvalidOperationException("The root directory cannot be overwritten.");
}
if (newPath.StartsWith(oldPath))
{
throw new InvalidOperationException(string.Format("The destination directory({0}) cannot be a subdirectory of the source directory({1}).", newPath, oldPath));
}
await CheckWriteVersionAsync(trans).ConfigureAwait(false);
var oldNode = await FindAsync(trans, oldPath).ConfigureAwait(false);
if (!oldNode.Exists)
{
if (throwOnError) throw new InvalidOperationException(string.Format("The source directory '{0}' does not exist.", oldPath));
return null;
}
var newNode = await FindAsync(trans, newPath).ConfigureAwait(false);
// we have already checked that old and new are under this partition path, but one of them (or both?) could be under a sub-partition..
if (oldNode.IsInPartition(false) || newNode.IsInPartition(false))
{
if (!oldNode.IsInPartition(false) || !newNode.IsInPartition(false) || !FdbTuple.Equals(oldNode.Path, newNode.Path))
{
throw new InvalidOperationException("Cannot move between partitions.");
}
// both nodes are in the same sub-partition, delegate to it
return await GetPartitionForNode(newNode).DirectoryLayer.MoveInternalAsync(trans, oldNode.PartitionSubPath, newNode.PartitionSubPath, throwOnError).ConfigureAwait(false);
}
if (newNode.Exists)
{
if (throwOnError) throw new InvalidOperationException(string.Format("The destination directory '{0}' already exists. Remove it first.", newPath));
return null;
}
var parentNode = await FindAsync(trans, newPath.Substring(0, newPath.Count - 1)).ConfigureAwait(false);
if (!parentNode.Exists)
{
if (throwOnError) throw new InvalidOperationException(string.Format("The parent of the destination directory '{0}' does not exist. Create it first.", newPath));
return null;
}
trans.Set(GetSubDirKey(parentNode.Subspace, newPath.Get<string>(-1)), this.NodeSubspace.UnpackSingle<Slice>(oldNode.Subspace.Key));
await RemoveFromParent(trans, oldPath).ConfigureAwait(false);
return ContentsOfNode(oldNode.Subspace, newPath, oldNode.Layer);
}
示例13: InitializeDirectory
private void InitializeDirectory(IFdbTransaction trans)
{
// Set the version key
var writer = new SliceWriter(3 * 4);
writer.WriteFixed32((uint)LayerVersion.Major);
writer.WriteFixed32((uint)LayerVersion.Minor);
writer.WriteFixed32((uint)LayerVersion.Build);
trans.Set(this.RootNode.Pack(VersionKey), writer.ToSlice());
}
示例14: Drop
/// <summary>
/// Drop a student from a class
/// </summary>
public async Task Drop(IFdbTransaction tr, string s, string c)
{
var rec = AttendsKey(s, c);
if ((await tr.GetAsync(rec)).IsNullOrEmpty)
{ // not taking this class
return;
}
var students = Int32.Parse((await tr.GetAsync(ClassKey(c))).ToAscii());
tr.Set(ClassKey(c), Slice.FromAscii((students + 1).ToString()));
tr.Clear(rec);
}
示例15: PushQueueAsync
private async Task PushQueueAsync(IFdbTransaction tr, FdbSubspace queue, Slice taskId)
{
//TODO: use a high contention algo ?
// - must support Push and Pop
// - an empty queue must correspond to an empty subspace
// get the current size of the queue
var range = queue.ToRange();
var lastKey = await tr.Snapshot.GetKeyAsync(FdbKeySelector.LastLessThan(range.End)).ConfigureAwait(false);
int count = lastKey < range.Begin ? 0 : queue.Unpack(lastKey).Get<int>(0) + 1;
// set the value
tr.Set(queue.Pack(count, GetRandomId()), taskId);
}