summaryrefslogtreecommitdiffstats
path: root/glusterfs-hadoop/0.20.2/src/main/java/org/apache/hadoop/fs/glusterfs/GlusterFSBrickClass.java
blob: e633b8aae80e08de7542dda27efa903e077d55e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/**
 *
 * Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com>
 * This file is part of GlusterFS.
 *
 * Licensed under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * permissions and limitations under the License.
 *
 */

package org.apache.hadoop.fs.glusterfs;

import java.io.*;

public class GlusterFSBrickClass {
        String  host;
        String  exportedFile;
        long    start;
        long    end;
        boolean isChunked;
        int     stripeSize;     // Stripe size in bytes
        int     nrStripes;      // number of stripes
        int     switchCount;    // for SR, DSR - number of replicas of each stripe
                                // -1 for others

        public GlusterFSBrickClass (String brick, long start, long len, boolean flag,
                                    int stripeSize, int nrStripes, int switchCount)
                throws IOException {
                this.host = brick2host(brick);
                this.exportedFile = brick2file(brick);
                this.start = start;
                this.end = start + len;
                this.isChunked = flag;
                this.stripeSize = stripeSize;
                this.nrStripes = nrStripes;
                this.switchCount = switchCount;
        }

        public boolean isChunked () {
                return isChunked;
        }

        public String brickIsLocal(String hostname) {
                String path = null;
                File f = null;
                if (host.equals(hostname))
                        path = exportedFile;

                return path;
        }

        public int[] getBrickNumberInTree(long start, int len) {
                long end = len;
                int startNodeInTree = ((int) (start / stripeSize)) % nrStripes;
                int endNodeInTree = ((int) ((start + len) / stripeSize)) % nrStripes;

                if (startNodeInTree != endNodeInTree) {
                        end = (start - (start % stripeSize)) + stripeSize;
                        end -= start;
                }

                return new int[] {startNodeInTree, endNodeInTree, (int) end};
        }

        public boolean brickHasFilePart(int nodeInTree, int nodeLoc) {
                if (switchCount == -1)
                        return (nodeInTree == nodeLoc);

                nodeInTree *= switchCount;
                for (int i = nodeInTree; i < (nodeInTree + switchCount); i++) {
                        if (i == nodeLoc)
                                return true;
                }

                return false;
        }

        public String brick2host (String brick)
                throws IOException {
                String[] hf = null;

                hf = brick.split(":");
                if (hf.length != 2)
                        throw new IOException("Error getting hostname from brick");

                return hf[0];
        }

        public String brick2file (String brick)
                throws IOException {
                String[] hf = null;

                hf = brick.split(":");
                if (hf.length != 2)
                        throw new IOException("Error getting hostname from brick");

                return hf[1];
        }

}