Created
October 21, 2015 20:22
-
-
Save whyer/65bfcaacbdc689efd12d to your computer and use it in GitHub Desktop.
RavenFS POC
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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