public void removeFile(String fileName) {
        HDFSFile hdfsFile = null;
        try {
            hdfsFile = this.nameNode.removeFile(fileName);
        }
        catch (RemoteException e) {
            e.printStackTrace();
            System.out.println("[Error**] Exception occurs when fetching file " + fileName);
            return;
        }

        /* remove chunks from dataNode */
        ConcurrentHashMap<Integer, HDFSChunk> chunkTable = hdfsFile.getChunkTable();
        for (Entry<Integer, HDFSChunk> row : chunkTable.entrySet()) {
            
            HDFSChunk chunk = row.getValue();
            /* remove all three replicas */
            for (DataNodeInfo dataNodeInfo : chunk.getReplicaDataNodes()) {
                try {
                    /* get dataNode RMI stub */
                    DataNodeInterface dataNode = getDataNodeService(dataNodeInfo.registryIP);
                    /* DataNode RMI call : addChunk */
                    dataNode.removeChunk(fileName, chunk.getChunkNum());
                }
                catch (RemoteException | NotBoundException e2) {
                    //TODO - how to handle?
                    e2.printStackTrace();
                    continue;
                }
            }
        }
        return;
    }