Skip to content

Instantly share code, notes, and snippets.

@whyer
Created October 21, 2015 20:22
Show Gist options
  • Save whyer/65bfcaacbdc689efd12d to your computer and use it in GitHub Desktop.
Save whyer/65bfcaacbdc689efd12d to your computer and use it in GitHub Desktop.
RavenFS POC
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Nito.AsyncEx;
using Raven.Abstractions.FileSystem;
using Raven.Client.FileSystem;
using Raven.Json.Linq;
namespace RavenFSPoc
{
class Program
{
private static IFilesStore _store;
static void Main(string[] args)
{
_store = FilesStoreCreator.CreateStore();
AsyncContext.Run(() => AsyncMain());
_store.Dispose();
Console.WriteLine();
Console.WriteLine("Done");
Console.ReadLine();
}
private async static Task AsyncMain()
{
//await SaveABunchOfFiles();
//await EditingMetadata();
//await ReadingMetadata();
await Query();
}
private static async Task ReadingMetadata()
{
using (var session = _store.OpenAsyncSession())
{
Console.WriteLine("Opening file and printing metadata:");
var fileHeader = await session.LoadFileAsync("/folder-01/random-01.bin");
foreach (var key in fileHeader.Metadata.Keys)
{
Console.WriteLine(key + ": " + fileHeader.Metadata[key]);
}
}
}
private static async Task EditingMetadata()
{
using (var session = _store.OpenAsyncSession())
{
Console.WriteLine("Opening file and editing metadata:");
var fileHeader = await session.LoadFileAsync("/folder-01/random-01.bin");
fileHeader.Metadata["AllowWrite"] = "Users";
Console.WriteLine("Saving changes");
await session.SaveChangesAsync();
}
}
private static async Task Query()
{
using (var session = _store.OpenAsyncSession())
{
var files = await session.Query()
.Where("AllowWrite:Users")
.ToListAsync();
Console.WriteLine("Query results:");
foreach (var fileHeader in files)
{
Console.WriteLine(fileHeader.Name);
}
}
}
private static async Task SaveABunchOfFiles()
{
using (var session = _store.OpenAsyncSession())
{
for (int i = 1; i <= 25; i++)
{
var file = string.Format("folder-{0:00}/random-{0:00}.bin", i);
Console.WriteLine("Register file for upload: " + file);
session.RegisterUpload(file, 128, stream =>
{
var bytes = new byte[128];
new Random().NextBytes(bytes);
stream.Write(bytes, 0, 128);
}, new RavenJObject
{
{"AllowWrite", "Admins"}
});
}
Console.WriteLine("Saving changes");
await session.SaveChangesAsync();
}
}
}
public class FilesStoreCreator
{
public static IFilesStore CreateStore()
{
IFilesStore fsStore = new FilesStore()
{
Url = "http://localhost:8080",
DefaultFileSystem = "FirstTest"
}.Initialize();
return fsStore;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment