mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
303 lines
7.8 KiB
ReStructuredText
303 lines
7.8 KiB
ReStructuredText
API
|
||
===================================
|
||
|
||
Master server
|
||
###################################
|
||
You can append to any HTTP API with &pretty=y to see a formatted json output.
|
||
|
||
Assign a file key
|
||
***********************************
|
||
|
||
.. code-block:: bash
|
||
|
||
# Basic Usage:
|
||
curl http://localhost:9333/dir/assign
|
||
{"count":1,"fid":"3,01637037d6","url":"127.0.0.1:8080",
|
||
"publicUrl":"localhost:8080"}
|
||
# To assign with a specific replication type:
|
||
curl "http://localhost:9333/dir/assign?replication=001"
|
||
# To specify how many file ids to reserve
|
||
curl "http://localhost:9333/dir/assign?count=5"
|
||
# To assign a specific data center
|
||
curl "http://localhost:9333/dir/assign?dataCenter=dc1"
|
||
|
||
Lookup volume
|
||
***********************************
|
||
We would need to find out whether the volumes have moved.
|
||
|
||
.. code-block:: bash
|
||
|
||
curl "http://localhost:9333/dir/lookup?volumeId=3&pretty=y"
|
||
{
|
||
"locations": [
|
||
{
|
||
"publicUrl": "localhost:8080",
|
||
"url": "localhost:8080"
|
||
}
|
||
]
|
||
}
|
||
# Other usages:
|
||
# You can actually use the file id to lookup
|
||
curl "http://localhost:9333/dir/lookup?volumeId=3,01637037d6"
|
||
# If you know the collection, specify it since it will be a little faster
|
||
curl "http://localhost:9333/dir/lookup?volumeId=3&collection=turbo"
|
||
|
||
Force garbage collection
|
||
***********************************
|
||
If your system has many deletions, the deleted file's disk space will not be synchronously re-claimed. There is a background job to check volume disk usage. If empty space is more than the threshold, default to 0.3, the vacuum job will make the volume readonly, create a new volume with only existing files, and switch on the new volume. If you are impatient or doing some testing, vacuum the unused spaces this way.
|
||
|
||
.. code-block:: bash
|
||
|
||
curl "http://localhost:9333/vol/vacuum"
|
||
curl "http://localhost:9333/vol/vacuum?garbageThreshold=0.4"
|
||
|
||
The garbageThreshold=0.4 is optional, and will not change the default threshold. You can start volume master with a different default garbageThreshold.
|
||
|
||
Pre-Allocate Volumes
|
||
***********************************
|
||
|
||
One volume servers one write a time. If you need to increase concurrency, you can pre-allocate lots of volumes.
|
||
|
||
.. code-block:: bash
|
||
|
||
curl "http://localhost:9333/vol/grow?replication=000&count=4"
|
||
{"count":4}
|
||
# specify a collection
|
||
curl "http://localhost:9333/vol/grow?collection=turbo&count=4"
|
||
# specify data center
|
||
curl "http://localhost:9333/vol/grow?dataCenter=dc1&count=4"
|
||
|
||
This generates 4 empty volumes.
|
||
|
||
Upload File Directly
|
||
***********************************
|
||
|
||
.. code-block:: bash
|
||
|
||
curl -F file=@/home/chris/myphoto.jpg http://localhost:9333/submit
|
||
{"fid":"3,01fbe0dc6f1f38","fileName":"myphoto.jpg",
|
||
"fileUrl":"localhost:8080/3,01fbe0dc6f1f38","size":68231}
|
||
|
||
This API is a little convenient. The master server would contact itself via HTTP to get an file id and store it to the right volume server. It is a convenient API and does not support different parameters when assigning file id.
|
||
|
||
Check System Status
|
||
***********************************
|
||
|
||
.. code-block:: bash
|
||
|
||
curl "http://10.0.2.15:9333/cluster/status?pretty=y"
|
||
{
|
||
"IsLeader": true,
|
||
"Leader": "10.0.2.15:9333",
|
||
"Peers": [
|
||
"10.0.2.15:9334",
|
||
"10.0.2.15:9335"
|
||
]
|
||
}
|
||
curl "http://localhost:9333/dir/status?pretty=y"
|
||
{
|
||
"Topology": {
|
||
"DataCenters": [
|
||
{
|
||
"Free": 3,
|
||
"Id": "dc1",
|
||
"Max": 7,
|
||
"Racks": [
|
||
{
|
||
"DataNodes": [
|
||
{
|
||
"Free": 3,
|
||
"Max": 7,
|
||
"PublicUrl": "localhost:8080",
|
||
"Url": "localhost:8080",
|
||
"Volumes": 4
|
||
}
|
||
],
|
||
"Free": 3,
|
||
"Id": "DefaultRack",
|
||
"Max": 7
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"Free": 21,
|
||
"Id": "dc3",
|
||
"Max": 21,
|
||
"Racks": [
|
||
{
|
||
"DataNodes": [
|
||
{
|
||
"Free": 7,
|
||
"Max": 7,
|
||
"PublicUrl": "localhost:8081",
|
||
"Url": "localhost:8081",
|
||
"Volumes": 0
|
||
}
|
||
],
|
||
"Free": 7,
|
||
"Id": "rack1",
|
||
"Max": 7
|
||
},
|
||
{
|
||
"DataNodes": [
|
||
{
|
||
"Free": 7,
|
||
"Max": 7,
|
||
"PublicUrl": "localhost:8082",
|
||
"Url": "localhost:8082",
|
||
"Volumes": 0
|
||
},
|
||
{
|
||
"Free": 7,
|
||
"Max": 7,
|
||
"PublicUrl": "localhost:8083",
|
||
"Url": "localhost:8083",
|
||
"Volumes": 0
|
||
}
|
||
],
|
||
"Free": 14,
|
||
"Id": "DefaultRack",
|
||
"Max": 14
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"Free": 24,
|
||
"Max": 28,
|
||
"layouts": [
|
||
{
|
||
"collection": "",
|
||
"replication": "000",
|
||
"writables": [
|
||
1,
|
||
2,
|
||
3,
|
||
4
|
||
]
|
||
}
|
||
]
|
||
},
|
||
"Version": "0.47"
|
||
}
|
||
|
||
Volume Server
|
||
###################################
|
||
|
||
Upload File
|
||
***********************************
|
||
|
||
.. code-block:: bash
|
||
|
||
curl -F file=@/home/chris/myphoto.jpg http://127.0.0.1:8080/3,01637037d6
|
||
{"size": 43234}
|
||
|
||
The size returned is the size stored on WeedFS, sometimes the file is automatically gzipped based on the mime type.
|
||
|
||
Upload File Directly
|
||
***********************************
|
||
|
||
.. code-block:: bash
|
||
|
||
curl -F file=@/home/chris/myphoto.jpg http://localhost:8080/submit
|
||
{"fid":"3,01fbe0dc6f1f38","fileName":"myphoto.jpg","fileUrl":"localhost:8080/3,01fbe0dc6f1f38","size":68231}
|
||
|
||
This API is a little convenient. The volume server would contact the master to get an file id and store it to the right volume server(not necessarily itself).
|
||
|
||
Delete File
|
||
***********************************
|
||
|
||
.. code-block:: bash
|
||
|
||
curl -X DELETE http://127.0.0.1:8080/3,01637037d6
|
||
|
||
Create а specific volume on a specific volume server
|
||
*****************************************************
|
||
.. code-block:: bash
|
||
|
||
curl "http://localhost:8080/admin/assign_volume?replication=000&volume=3"
|
||
|
||
This generates volume 3 on this volume server.
|
||
|
||
If you use other replicationType, e.g. 001, you would need to do the same on other volume servers to create the mirroring volumes.
|
||
|
||
Check Volume Server Status
|
||
***********************************
|
||
|
||
.. code-block:: bash
|
||
|
||
curl "http://localhost:8080/status?pretty=y"
|
||
{
|
||
"Version": "0.34",
|
||
"Volumes": [
|
||
{
|
||
"Id": 1,
|
||
"Size": 1319688,
|
||
"RepType": "000",
|
||
"Version": 2,
|
||
"FileCount": 276,
|
||
"DeleteCount": 0,
|
||
"DeletedByteCount": 0,
|
||
"ReadOnly": false
|
||
},
|
||
{
|
||
"Id": 2,
|
||
"Size": 1040962,
|
||
"RepType": "000",
|
||
"Version": 2,
|
||
"FileCount": 291,
|
||
"DeleteCount": 0,
|
||
"DeletedByteCount": 0,
|
||
"ReadOnly": false
|
||
},
|
||
{
|
||
"Id": 3,
|
||
"Size": 1486334,
|
||
"RepType": "000",
|
||
"Version": 2,
|
||
"FileCount": 301,
|
||
"DeleteCount": 2,
|
||
"DeletedByteCount": 0,
|
||
"ReadOnly": false
|
||
},
|
||
{
|
||
"Id": 4,
|
||
"Size": 8953592,
|
||
"RepType": "000",
|
||
"Version": 2,
|
||
"FileCount": 320,
|
||
"DeleteCount": 2,
|
||
"DeletedByteCount": 0,
|
||
"ReadOnly": false
|
||
},
|
||
{
|
||
"Id": 5,
|
||
"Size": 70815851,
|
||
"RepType": "000",
|
||
"Version": 2,
|
||
"FileCount": 309,
|
||
"DeleteCount": 1,
|
||
"DeletedByteCount": 0,
|
||
"ReadOnly": false
|
||
},
|
||
{
|
||
"Id": 6,
|
||
"Size": 1483131,
|
||
"RepType": "000",
|
||
"Version": 2,
|
||
"FileCount": 301,
|
||
"DeleteCount": 1,
|
||
"DeletedByteCount": 0,
|
||
"ReadOnly": false
|
||
},
|
||
{
|
||
"Id": 7,
|
||
"Size": 46797832,
|
||
"RepType": "000",
|
||
"Version": 2,
|
||
"FileCount": 292,
|
||
"DeleteCount": 0,
|
||
"DeletedByteCount": 0,
|
||
"ReadOnly": false
|
||
}
|
||
]
|
||
} |