{"action":"created","issue":{"url":"https://api.github.com/repos/dotnet/orleans/issues/919","labels_url":"https://api.github.com/repos/dotnet/orleans/issues/919/labels{/name}","comments_url":"https://api.github.com/repos/dotnet/orleans/issues/919/comments","events_url":"https://api.github.com/repos/dotnet/orleans/issues/919/events","html_url":"https://github.com/dotnet/orleans/pull/919","id":111882772,"number":919,"title":"Journaled Storage Provider","user":{"login":"jkonecki","id":1775247,"avatar_url":"https://avatars.githubusercontent.com/u/1775247?v=3","gravatar_id":"","url":"https://api.github.com/users/jkonecki","html_url":"https://github.com/jkonecki","followers_url":"https://api.github.com/users/jkonecki/followers","following_url":"https://api.github.com/users/jkonecki/following{/other_user}","gists_url":"https://api.github.com/users/jkonecki/gists{/gist_id}","starred_url":"https://api.github.com/users/jkonecki/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jkonecki/subscriptions","organizations_url":"https://api.github.com/users/jkonecki/orgs","repos_url":"https://api.github.com/users/jkonecki/repos","events_url":"https://api.github.com/users/jkonecki/events{/privacy}","received_events_url":"https://api.github.com/users/jkonecki/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":5,"created_at":"2015-10-16T18:14:51Z","updated_at":"2015-10-19T19:29:51Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/dotnet/orleans/pulls/919","html_url":"https://github.com/dotnet/orleans/pull/919","diff_url":"https://github.com/dotnet/orleans/pull/919.diff","patch_url":"https://github.com/dotnet/orleans/pull/919.patch"},"body":"I've added a Journaled Storage Provider in OrleansEventSourcing assembly.\r\n\r\nNow I need a bit of assistance with the following issue.\r\n\r\n1. Storage Providers are managed by `StorageProviderManager`,\r\n2. `ProviderLoader<IStorageProvider>` is used to load storage providers,\r\n3. I create a separate interface `IJournaledStorageProvider` in `OrleansEventSourcing` assembly,\r\n\r\nThis causes following problems:\r\n\r\n1. I cannot create `ProviderLoader<IJournaledStorageProvider>` in `StorageProviderManager` as that requires a reference from `Orleans` to `OrleansEventSourcing`\r\n2. Even if the `IJournaledStorageProvider` existed in `Orleans` I think we would need to add `<JournaledStorageProviders>` node under `<Global>` in OrleansConfiguration.xml so the provider validation wouldn't fail in ProviderLoaders.\r\n\r\n"},"comment":{"url":"https://api.github.com/repos/dotnet/orleans/issues/comments/149320549","html_url":"https://github.com/dotnet/orleans/pull/919#issuecomment-149320549","issue_url":"https://api.github.com/repos/dotnet/orleans/issues/919","id":149320549,"user":{"login":"jason-bragg","id":10675494,"avatar_url":"https://avatars.githubusercontent.com/u/10675494?v=3","gravatar_id":"","url":"https://api.github.com/users/jason-bragg","html_url":"https://github.com/jason-bragg","followers_url":"https://api.github.com/users/jason-bragg/followers","following_url":"https://api.github.com/users/jason-bragg/following{/other_user}","gists_url":"https://api.github.com/users/jason-bragg/gists{/gist_id}","starred_url":"https://api.github.com/users/jason-bragg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jason-bragg/subscriptions","organizations_url":"https://api.github.com/users/jason-bragg/orgs","repos_url":"https://api.github.com/users/jason-bragg/repos","events_url":"https://api.github.com/users/jason-bragg/events{/privacy}","received_events_url":"https://api.github.com/users/jason-bragg/received_events","type":"User","site_admin":false},"created_at":"2015-10-19T19:29:51Z","updated_at":"2015-10-19T19:29:51Z","body":"@jkonecki - \"cannot create  ProviderLoader<IJournaledStorageProvider>  in  StorageProviderManager \"\r\nTo me this makes sense since IJournaledStorageProvider is not an IStorageProvider.  Any new storage provider will need to conform to the IStorageProvider interface to fit into the existing framework.  How would moving the interfaces into Orleans change this?\r\n\r\n@gabikliot - \"adding just the interfaces to Orleans core is not a problem\"\r\nI agree that adding a few interfaces to core is not a big deal, but I think the issues @jkonecki is encountering -may- indicate flaws in our approach or extensibility issues in our storage provider story.  In general, it should not be difficult for Orleans users to contribute new provider types without requiring changes to core; If this can't be done, the causes should be examined.\r\n\r\n@jkonecki - \"For me  IStorageProvider  should describe common behavior of all storage providers regardless of what and how is actually being stored. \"\r\nDoes it not?  In general I agree, but this assumes there is a common pattern that is applicable to all storage providers.\r\nWhat would this new abstraction look like?\r\n\r\nIs IJournalStorageProvider really a storage provider?  \r\nIf it is it should fit into the storage provider infrastructure, if it is not then shouldn't it be orthogonal?\r\nAre we trying to couple two unrelated sets of functionality because they are conceptually similar?"}}