{"id":22462523,"url":"https://github.com/commonjava/indy-storage-service","last_synced_at":"2025-03-27T14:20:32.529Z","repository":{"id":45573517,"uuid":"511368870","full_name":"Commonjava/indy-storage-service","owner":"Commonjava","description":"indy-storage-service","archived":false,"fork":false,"pushed_at":"2022-10-27T03:39:58.000Z","size":14,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-02-01T18:36:31.341Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Commonjava.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-07-07T03:24:34.000Z","updated_at":"2022-07-14T09:51:17.000Z","dependencies_parsed_at":"2023-01-20T16:15:54.106Z","dependency_job_id":null,"html_url":"https://github.com/Commonjava/indy-storage-service","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Commonjava%2Findy-storage-service","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Commonjava%2Findy-storage-service/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Commonjava%2Findy-storage-service/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Commonjava%2Findy-storage-service/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Commonjava","download_url":"https://codeload.github.com/Commonjava/indy-storage-service/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245858889,"owners_count":20684062,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-06T09:10:05.937Z","updated_at":"2025-03-27T14:20:32.497Z","avatar_url":"https://github.com/Commonjava.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Indy Storage Service\nIndy Storage Service allows users to store and retrieve path-mapped files. \n\nEach file has a path, e.g, '/foo/bar.txt', associated with it. All files are grouped \nby 'filesystem'. You may think of it as the different drivers on you disk.\n\nUsers can r/w the files via REST api. Different users can r/w same file without \naffecting each other. For example, if one user is downloading the '/foo/bar.txt' \nwhile another user is uploading a new version of it, the first user will get the file \ncontent at the moment he/she started the download.\n\nThe most significant feature is the 'cluster' mode. You can deploy it on a Cloud platform,\nsuch as Openshift, and scale up as many nodes as you want. \nThe concurrent r/w promise is still held without worrying about r/w conflicts.\nOn cluster mode, all nodes share the same persistent volume and connect to the same Cassandra as the backend DB.\nThere are some instructions at the bottom about how to set up a storage service cluster on Openshift.\n\n## Prerequisite for building\n1. jdk11+\n2. mvn 3.6.2+\n\n## Prerequisite for debugging in local\n1. docker 20+\n2. docker-compose 1.20+\n\n## Configure \n\nRefer to [src/main/resources/application.yaml](./src/main/resources/application.yaml) for details\n\n\n## Try it locally\n\nThere are a few steps to set it up on your local machine.\n\n1. Build (make sure you use jdk11+ and mvn 3.6.2+)\n```\n$ git clone git@github.com:Commonjava/indy-storage-service.git\n$ cd indy-storage-service\n$ mvn clean compile\n```\n2. Start dependent services (you need to have Docker installed). \nStorage service use Cassandra as the backend DB. Below will start a standalone Cassandra \nserver. For more information, please refer to Cassandra docs. \n```\n$ docker-compose up\n```\n3. Start in debug mode\n```\n$ mvn quarkus:dev\n```\n4. Open another terminal, upload a file then download it and list a directory.\n```\n$ echo \"test $(date)\" | curl -X PUT -d @- http://localhost:8080/api/content/myfiles/foo/bar.txt\n$ curl http://localhost:8080/api/content/myfiles/foo/bar.txt\n$ curl http://localhost:8080/api/browse/myfiles/foo\n```\n\n## Scale up\n\nThe docker image is at https://quay.io/factory2/indy-storage-service:latest, \nand you can run a cluster by deploying it on a cloud platform. \n\nTODO: instructions for deploying it on Openshift.\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommonjava%2Findy-storage-service","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcommonjava%2Findy-storage-service","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommonjava%2Findy-storage-service/lists"}